"""
@author: Shizuku
@file: 2022-11-25-practice.py
@time: 2022/11/25 11:41
"""
from datetime import *
import os
import random

def exer1():
    n = int(input("请输入一个整数："))
    day = date.today()
    # now = datetime.now()
    print(("当前日期：{}").format(day))
    result = day-timedelta(days=n)
    print(f"{n}天前的日期为:{result.strftime('%Y-%m-%d')}")


def exer2():
    path = r'E:\pyProject\practice'
    for i in os.listdir(path):
        print(i)


def exer3():
    lst1 = [11, 22, 33, 11, 22, 55, 44, 77, 44, 99, 88]
    lst2 = set(lst1)
    lst3 = list(lst2)
    lst3.sort()
    print(lst3)

# exer4:
#     global

# exer5:
#   把全局变量都写在一个模块文件中，
#   使用的时候导入即可

# exer6:
#     整数、浮点数、复数、字符串、布尔、NoneType、列表、元组、字典、集合


def exer7():
    print(random.randint(1, 10))
    print(random.uniform(1, 10))
    print(random.random())

# exer8:
#     不可变数据：Number（数字）、String（字符串）、Tuple（元组）
#     可变数据：List（列表）、Dictionary（字典）、Set（集合）

# exer9:
#     当变量是不可变对象时，a+=1和a=a+1调用的都是__add__方法，返回的是一个新对象
#     当变量是可变对象时，a+=1调用的是__iadd__方法，直接在原对象上进行更新；a=a+1调用的是__add__方法，返回一个新对象

# exer10:
#      PEP8:
#           PEP是Python Enhancement Proposal的缩写，通常翻译为“Python增强提案”。
#           每个PEP都是一份为Python社区提供的指导Python往更好的方向发展的技术文档，
#           其中的第8号增强提案（PEP 8）是针对Python语言编订的代码风格指南。
#      标准:
#           1、缩进使用四个空格
#           2、运算符的周围使用空格
#           3、逗号后面使用空格
#           4、每一行代码控制在80个字符以内，超过了用续行符
#           5、注释最好独占一行
#           6、函数和类 最好跟前面的代码空两行


def exer11():
    str1 = "asbfbjnafusfneljjifbjkunjkfhd"
    lst = []
    for i in str1:
        if i not in lst:
            lst.append(i)
        else:
            print("第一出现重复的字母是:", i)
            break


# exer12:
#     只有在容器类型里面包含可变数据类型的时候，深浅拷贝会造造成不同的影响
#     浅拷贝之后的数据改变，可能会影响原来的数据
#     深拷贝之后的数据改变，不会影响原来的数据
#     因为：浅拷贝只拷贝容器类型里的第一层数据的地址
#     而深拷贝会拷贝里面的每一层的值


# exer13:
#     引用计数为主，分代回收、标记清除为辅的垃圾回收方式
#     以及对小整型进行缓存和简单字符串驻留的内存池机制。


def exer14():
    arr = [1, 4, 7, 3, 6, 9, 11, 2]
    print(bubblesort(arr))
    print(quicksort(arr))


def quicksort(arr):
    if len(arr) >= 2:
        mid = arr[len(arr) // 2]
        left, right = [], []
        arr.remove(mid)
        for num in arr:
            if num >= mid:
                right.append(num)
            else:
                left.append(num)
        return quicksort(left) + [mid] + quicksort(right)
    else:
        return arr


def bubblesort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n - i - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
    return arr


def exer15():
    str1 = input("请输入一串字符：")
    if str1 == str1[::-1]:
        print("是回文")
    else:
        print("不是一个回文")
